//
//  KDCopyPage.m
//  KDExample
//
//  Created by YeQing on 2017/5/16.
//  Copyright © 2017年 naruto. All rights reserved.
//

#import "KDCopyPage.h"

@interface KDCopyPage ()
@property (nonatomic ,readwrite, strong) NSArray *array;

/**
 copy 类型
 */
@property (nonatomic, copy) NSMutableArray *mutableArray;
@end

@implementation KDCopyPage
#pragma mark - system
+(void)load
{
    [kNBCURLRouterInstance registerScheme:@"KDCopyPage" scheme:@"copypage"];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    
    //copy操作符，得到是不可变对象， mutableCopy 得到的是可变的对象
    NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
    //add test obj
    NSObject *itemObj = [[NSObject alloc] init];
    NSMutableArray *itemArray = [[NSMutableArray alloc] initWithObjects:@"hello",@"world", nil];
    NSArray *array = @[ @1, @2, @3, @4 ,itemObj,itemArray];
    [mutableArray addObjectsFromArray:array];
    self.array = [mutableArray mutableCopy];
    NSLog(@"%@",self.array);//得到的是 NSArray class
    
    //测试copy、mutableCopy，可以打印 mutableArray[5]、copyObj1[5]、mcopyObj1[5] 地址一样
    id copyObj = [array copy];//得到的是不可变的NSArray,浅拷贝，内存地址没变
    id copyObj1 = [mutableArray copy];//得到的是不可变的NSArray，单层深拷贝，内存地址变化，但是array集合内元素还是指针拷贝
    
    id mcopyObj = [array mutableCopy];//得到的是可变的NSMutableArray，单层深拷贝，内存地址变化，但是array内元素还是指针拷贝（浅拷贝）
    id mcopyObj1 = [mutableArray mutableCopy];//得到的是可变的NSMutableArray，单层深拷贝，内存地址变化，但是array集合内元素还是指针拷贝
    
    
    //声明copy类型的，在赋值之后，得到的是不可变的对象。
    NSMutableArray *arrayTmp = [NSMutableArray arrayWithObjects:@1,@2,nil];
    self.mutableArray = arrayTmp;
//    [self.mutableArray removeObjectAtIndex:0];//这里会crash,因为 copy 得到是不可变对象
}

@end
